次の例に示すとおり、JDBCでは、ネイティブ・エラー・コードおよびメッセージを取得できます。
private static void printSQLExceptions(SQLException e) { while (e != null) { System.out.println("SQLState: " + e.getSQLState()); System.out.println("Message : " + e.getMessage()); System.out.println("Vendor : " + e.getErrorCode()); e.printStackTrace(); e = e.getNextException(); System.out.println(""); } e.printStackTrace(); } . . . try { // JDBC method calls here } catch (SQLException ex) { ex.printSQLExceptions(); }
次の例に示すとおり、ODBCでは、ネイティブ・エラー・コードおよびメッセージは、SQLError関数を使用して取得できます。
#define MSG_LNG 512
SQLCHAR szSqlState[MSG_LNG]; /* SQL state string */
SQLINTEGER pfNativeError; /* Native error code */
SQLCHAR szErrorMsg[MSG_LNG];
/* Error msg text buffer pointer */
SQLSMALLINT pcbErrorMsg;
/* Error msg text Available bytes */
SQLRETURN ret = SQL_SUCCESS;
while ( ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO ) {
ret = SQLError(henv, hdbc, hstmt, szSqlState, &pfNativeError,
szErrorMsg, MSG_LNG, &pcbErrorMsg);
switch (ret) {
case SQL_SUCCESS:
fprintf(stderr, "*** %s\n*** ODBC Err = %s, ",
"TimesTen Err = %ld\n",
szErrorMsg, szSqlState, pfNativeError);
break;
case SQL_SUCCESS_WITH_INFO:
fprintf(stderr, "*** Call to SQLError failed with return ",
"code of SQL_SUCCESS_WITH_INFO.\n ",
"*** Need to increase size of ",
"message buffer.\n");
break;
case SQL_INVALID_HANDLE:
fprintf(stderr, "*** Call to SQLError failed with ",
"return code of SQL_INVALID_HANDLE.\n");
break;
case SQL_ERROR:
fprintf(stderr, "*** Call to SQLError failed with ",
"return code of SQL_ERROR.\n");
break;
case SQL_NO_DATA_FOUND:
break;
}
}
1回のODBC操作またはJDBC操作で、複数のエラーを生成できます。これらのエラーは、ODBC関数SQLErrorまたはJDBCメソッドSQLExceptionを複数回コールすることによって取得できます。